package com.briup.server.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.briup.server.domain.bean.User;
import com.briup.server.domain.dto.*;
import com.briup.server.domain.vo.UserDetailVO;
import jakarta.validation.Valid;

import java.util.List;


public interface UserService extends IService<User> {

    /**
     * 查询所有实验室管理员用户
     *
     * @return 实验室管理员用户列表
     */
    List<User> labsAdminList();

    /**
     * 用户登录
     *
     * @param userLoginDTO 用户登录DTO
     * @return 登录成功后的token
     */
    String login(@Valid UserLoginDTO userLoginDTO);

    /**
     * 根据用户ID查询用户详情
     *
     * @param userId 用户ID
     * @return 用户详情VO
     */
    UserDetailVO queryByUserId(Long userId);

    /**
     * 根据条件分页查询用户
     *
     * @param queryDTO 用户查询DTO
     * @return 分页用户列表
     */
    Page<UserDetailVO> pageQueryByCondition(UserQueryDTO queryDTO);

    /**
     * 保存或更新用户信息
     *
     * @param modifiedDTO 用户修改DTO
     */
    void saveOrUpdateUser(UserModifiedDTO modifiedDTO);

    /**
     * 重置用户密码
     *
     * @param userId 用户ID
     */
    void resetPassword(Long userId);

    /**
     * 更新用户密码
     *
     * @param resetPasswordDTO 用户重置密码DTO
     */
    void updatePassword(UserResetPasswordDTO resetPasswordDTO);

    /**
     * 批量删除用户信息，包括用户与角色之间的关联信息
     *
     * @param ids 用户id列表
     */
    void removeUser(List<Long> ids);

    /**
     * 用户登录（验证码登录）
     *
     * @param userLoginByCodeDTO 用户登录（验证码登录）DTO
     * @return 登录成功后的token
     */
    String loginByCode(UserLoginByCodeDTO userLoginByCodeDTO);
}
